package com.boot.utils;

import com.boot.result.Result;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

import java.io.IOException;

public class ResponseUtil {
    public static void build(
            HttpServletResponse response,
            HttpStatus status,
            Object data
    ) throws IOException {
        //设置响应状态
        response.setStatus(status.value());
        //设置响应体格式
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);

        //浏览器有时会忽略服务器发送的Content-Type头，攻击者可能利用这点让浏览器将非可执行文件当作可执行文件处理
        response.setHeader("X-Content-Type-Options", "nosniff");

        //防止嵌入劫持，控制页面是否可以被嵌入到<frame>、<iframe>或<object>中
        //可选参数：SAMEORIGIN：只允许同源页面嵌入
        response.setHeader("X-Frame-Options", "DENY");

        //禁用缓存，确保敏感信息（如认证令牌）不会被存储在磁盘或内存缓存中
        //可选参数：no-cache：可以存储，但使用前必须验证，private：可以缓存，但只在客户端
        response.setHeader("Cache-Control", "no-store,no-cache");

        Result sData = Result.success(data);
        new ObjectMapper().writeValue(response.getWriter(), sData);
    }
}
